package com.drinkdelivery.service.impl;

import java.util.Arrays;
import java.util.List;

import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.drinkdelivery.common.core.domain.model.LoginUser;
import com.drinkdelivery.common.utils.file.FileUtils;
import com.sun.corba.se.spi.ior.ObjectKey;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.drinkdelivery.mapper.ProductBrandMapper;
import com.drinkdelivery.common.domain.ProductBrand;
import com.drinkdelivery.service.IProductBrandService;

/**
 * 商品品牌Service业务层处理
 *
 * @author lzh
 * @date 2024-11-04
 */
@Service
public class ProductBrandServiceImpl extends ServiceImpl<ProductBrandMapper, ProductBrand> implements IProductBrandService
{
    @Autowired
    private ProductBrandMapper productBrandMapper;

    /**
     * 查询商品品牌
     *
     * @param id 商品品牌主键
     * @return 商品品牌
     */
    @Override
    public ProductBrand selectProductBrandById(Long id)
    {
        //根据id获取未逻辑删除的数据
        LambdaQueryWrapper<ProductBrand> lqw = new LambdaQueryWrapper<>();
        lqw
                .eq(ProductBrand::getId,id)
                .eq(ProductBrand::getIsDeleted, 0);
        return this.getOne(lqw);
    }

    /**
     * 查询商品品牌列表
     *
     * @param productBrand 商品品牌
     * @return 商品品牌
     */
    @Override
    public List<ProductBrand> selectProductBrandList(ProductBrand productBrand)
    {
        return productBrandMapper.selectProductBrandList(productBrand);
    }

    /**
     * 新增商品品牌
     *
     * @param productBrand 商品品牌
     * @return 结果
     */
    @Override
    public Boolean insertProductBrand(ProductBrand productBrand)
    {
        try {
            //todo
            //商户客户id
            Integer userId = 1;
            productBrand.setMerchantId(userId);

            validatorProductBrandParam(productBrand);

            if (this.save(productBrand)) {
                return true;
            } else {
                throw new RuntimeException();
            }
        } catch (RuntimeException e) {
            FileUtils.deleteFileIfExists(productBrand.getLogoImage());
            System.err.println("新增品牌报错" + e);
            throw new RuntimeException(e.getMessage());
        }
    }



    /**
     * 修改商品品牌
     *
     * @param productBrand 商品品牌
     * @return 结果
     */
    @Override
    public Boolean updateProductBrand(ProductBrand productBrand)
    {
        try {
            validatorProductBrandParam(productBrand);
            if (this.updateById(productBrand)){
                return true;
            } else {
                throw new RuntimeException();
            }
        }catch (RuntimeException e){
            FileUtils.deleteFileIfExists(productBrand.getLogoImage());
            System.err.println("修改品牌报错"+e);
            throw new RuntimeException(e.getMessage());
        }

    }

    /**
     * 批量删除商品品牌
     *
     * @param ids 需要删除的商品品牌主键
     * @return 结果
     */
    @Override
    public boolean deleteProductBrandByIds(Long[] ids)
    {
        LambdaUpdateWrapper<ProductBrand> luw = new LambdaUpdateWrapper<>();
        luw
                //未逻辑删除
                .eq(ProductBrand::getIsDeleted,0)
                //遍历查询ids
                .in(ProductBrand::getId, Arrays.asList(ids))
                //进行逻辑删除
                .set(ProductBrand::getIsDeleted, 1);
        return this.update(luw);
    }

    /**
     * 删除商品品牌信息
     *
     * @param id 商品品牌主键
     * @return 结果
     */
    @Override
    public Boolean deleteProductBrandById(Long id)
    {
        LambdaUpdateWrapper<ProductBrand> luw = new LambdaUpdateWrapper<>();
        luw.eq(ProductBrand::getId,id);
        luw.set(ProductBrand::getIsDeleted,1);
        return this.update(luw);
    }

    public void validatorProductBrandParam(ProductBrand productBrand){
        if (ObjectUtil.isEmpty(productBrand.getBrandName()))
            throw new RuntimeException("请填写品牌名称");

        if (ObjectUtil.isEmpty(productBrand.getCategoryId()))
            throw new RuntimeException("请填写品牌分类");

        if (ObjectUtil.isEmpty(productBrand.getLogoImage()))
            throw new RuntimeException("请上传品牌图片");
    }
}
